package com.fengyun.scala

/**
 * @author Hanpeng
 * @date 2021/1/22 16:11
 * @description: AnyVal 是所有value类型的root class。它的子类型包括7个数字类型和2个非数字类型。
 *               scala.Double, scala.Float, scala.Long, scala.Int, scala.Char, scala.Short, and scala.Byte are the numeric value types.
 *               scala.Unit and scala.Boolean。
 *               2.10之前,AnyVal 是 密闭的 trait。2.10之后,可以定义一个AnyVal的子类,称作用户自定义的value类。
 *               这种类由编译器特殊处理。
 *               合适的自定义value class提供了一种提高用户自定义类型性能的方法，避免了运行时的对象分配,并将虚拟方法调用调整为
 *               静态方法调用。
 *               自定义值类型避免对象分配的要求：
 *               1,必须有一个值参数,代表底层运行
 *               2,可以使用def,不可以使用val var 以及内置的traitss, classes or objects.
 *               3,没有其它trait
 *               4,不可以用于类型测试和模式匹配
 *               5,不能覆盖equals or hashCode method
 *
 *
 *
 *
 *
 *
 */
object TestAnyVal {

}

class WrapperTestAnyValHan(val underlying: Int) extends AnyVal {
  //这个是一个方法,里面调用静态方法
  def foo: WrapperTestAnyValHan = new WrapperTestAnyValHan(underlying * 19)
}
